package com.joyoung.sdk.utils;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.joyoung.sdk.config.Cons_Sdk;
import com.joyoung.sdk.info.BaseRequesRes;
import com.joyoung.sdk.info.Device;
import com.joyoung.sdk.interface_sdk.CallBack;
import com.joyoung.sdk.interface_sdk.ChangeDevCallBack;
import com.joyoung.sdk.interface_sdk.CommandCallBack;
import com.joyoung.sdk.interface_sdk.JoyoungLinkCallBack;
import com.joyoung.sdk.interface_sdk.SendCmdCallback;
import com.joyoung.sdk.utils.encryptdecryptutil.Encrypt;
import com.joyoung.sdk.utils.encryptdecryptutil.Md5Coder;
import com.joyoung.sdk.utils.encryptdecryptutil.XXTea;

import org.apache.commons.codec.DecoderException;
import org.apaches.commons.codec.binary.Hex;
import org.bouncycastle.jcajce.provider.asymmetric.RSA;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Type;
import java.security.interfaces.RSAPublicKey;
import java.util.UUID;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Created by liuwei on 2017/11/30.
 */

public final class JoyoungLinkSDK {

    /***
     * 初始化需要sdk内部解析指令，生成json字符串的调用本方法，注意：当isResolve==true时，必须配置configXmlName
     * @param context 上下文
     * @param logindata 登录成功返回的数据
     * @param phonenumber 手机号
     * @param passwd 密码
     * @param source app类型，1代表爱下厨，2代表空净、3代表ONECUP
     * @param isResolve 是否需要解析指令
     * @param configXmlName 指令结构的key
     * @param commandCallBack 返回信息的回调
     * @param joyoungLinkCallBack 连接成功回调，在成功的方法里可以切换设备
     */
    public static void init(Context context, String logindata, String phonenumber, String passwd, String source, boolean isResolve, String configXmlName, CommandCallBack commandCallBack, JoyoungLinkCallBack joyoungLinkCallBack) {
        JoyoungSDK.getInstance().init(context, logindata, phonenumber, passwd, source, isResolve, configXmlName, commandCallBack, joyoungLinkCallBack);
    }

    private static JoyoungLinkSDK joyoungLinkSDK = null;

    private JoyoungLinkSDK() {
    }

    /***
     * 单例模式，保证只有一个实例对象
     * @return
     */
    private synchronized static JoyoungLinkSDK getInstance() {
        if (joyoungLinkSDK == null) {
            joyoungLinkSDK = new JoyoungLinkSDK();
        }
        return joyoungLinkSDK;
    }

    /***
     * 初始化sdk
     * @param context 上下文
     * @param logindata 登录成功返回的数据
     * @param phonenumber 手机号
     * @param passwd 密码
     * @param source app类型，1代表爱下厨，2代表空净、3代表ONECUP
     * @param commandCallBack  指令返回信息的回调
     * @param joyoungLinkCallBack 连接成功回调，在成功的方法里可以切换设备
     */
    public static void init(Context context, String logindata, String phonenumber, String passwd, String source, CommandCallBack commandCallBack, JoyoungLinkCallBack joyoungLinkCallBack) {
        JoyoungSDK.getInstance().init(context, logindata, phonenumber, passwd, source, commandCallBack, joyoungLinkCallBack);
    }


    /***
     * 切换设备
     * @param context 上下文
     * @param devTypeId 设备型号，如（12289代表料理机Y18，15361代表烤箱35I6）
     * @param devID 设备ID
     * @param commandCallBack 连接返回信息的回调
     * @param changeDevCallBack 切换设备成功的回调
     */
    public static void changeDev(Context context, String decryptKey, String devTypeId, String devID, CommandCallBack commandCallBack, ChangeDevCallBack changeDevCallBack) {
        JoyoungSDK.getInstance().changeDev(context, decryptKey, devTypeId, devID, commandCallBack, changeDevCallBack);
    }

    /***
     *发送指令
     * @param cmd 指令，如查询指令（cc00000100000700300100b20000）
     * @param devID 设备id
     * @param isNew  是否新架构，不是传false，是传true
     * @param sendCmdCallback 发送命令的成功或失败回调
     * @throws Exception
     */
    public static void sendCMD(String cmd, String devID, boolean isNew, SendCmdCallback sendCmdCallback) throws Exception {
        JoyoungSDK.getInstance().sendCMD(cmd, devID, isNew, sendCmdCallback);
    }


    /***
     *发送指令
     * @param cmd 指令，如查询指令（cc00000100000700300100b20000）
     * @param devID 设备id
     * @param sendCmdCallback 发送命令的成功或失败回调
     * @throws Exception
     */
    public static void sendCMD(String cmd, String devID, SendCmdCallback sendCmdCallback) throws Exception {
        JoyoungSDK.getInstance().sendCMD(cmd, devID, sendCmdCallback);
    }

    /***
     * 服务停止
     * 解除订阅
     */
    public static void onDestroy() {
        JoyoungSDK.getInstance().onDestroy();
    }

}
